package cn.flying.cloud.file.core.factory;

import java.util.HashMap;
import java.util.Map;

import cn.flying.cloud.base.oss.enums.OssTypeEnum;
import cn.flying.cloud.base.oss.exception.OssException;
import cn.flying.cloud.base.oss.template.OssTemplate;
import cn.flying.cloud.file.core.oss.AwsS3OssTemplate;
import cn.flying.cloud.file.core.oss.MinioOssTemplate;

/**
 * 创建OssTemplate的工厂
 *
 * @author: admin
 * @date: 2025年02月28日 10:22
 * @version: 1.0
 */
public class OssTemplateFactory {
    private static final Map<String, Class<? extends OssTemplate>> TEMPLATE_MAP = new HashMap<>();

    static {
        TEMPLATE_MAP.put(OssTypeEnum.S3OS.getCode(), AwsS3OssTemplate.class);
        TEMPLATE_MAP.put(OssTypeEnum.MOS.getCode(), MinioOssTemplate.class);
        // 可以继续添加其他 OSS 实现类的映射
    }

    /**
     * 创建oss 操作模板
     *
     * @param ossType
     * @param endpoint
     * @param accessKey
     * @param secretKey
     * @param bucketName
     * @return
     */
    public static OssTemplate createTemplate(String ossType, String endpoint, String accessKey, String secretKey, String bucketName) {
        Class<? extends OssTemplate> templateClass = TEMPLATE_MAP.get(ossType);
        if (templateClass == null) {
            throw new OssException("不支持的 OSS 类型: " + ossType);
        }
        try {
            return templateClass.getConstructor(String.class, String.class, String.class, String.class)
                    .newInstance(endpoint, accessKey, secretKey, bucketName);
        } catch (Exception e) {
            throw new OssException("创建 OSS Template 失败", e);
        }
    }
}